﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using com.clinica.business.BE.gesliq;
using LiclGesLiq.Views;
using LiclGesLiq;
using LiclUtil;

namespace wesiGestClinica.gesliq.Controles
{
    public partial class UCBuscarPaciente : System.Web.UI.UserControl
    {
        LiclBandejaLiquidacionController oController = new LiclBandejaLiquidacionController();
        protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!Page.IsPostBack)
            { 
               try
               {
                   lbl_TituloModulo.Text = "Búsqueda de Pacientes";
                   IniciarControles();
                   if (TipoBus == 2 && txt_NroDocumento.Text.Trim() != string.Empty)
                       btn_Buscar_Click(null, null);
               }
               catch (Exception ex)
               {
                    
               }

            }
            lblMensaje.Visible = false;            
            lblMensaje.Text = string.Empty;
        }
        #region Metodos
        public void IniciarControles()
        {
            txt_Apellidomaterno.Text = string.Empty;
            txt_ApellidoPaterno.Text = string.Empty;
            txt_Nombre.Text = string.Empty;
            if (TipoBus == 2)
            {
                rbu_PorNroDocumento.Checked = true;
                rbu_PorNroDocumento_CheckedChanged(null, null);
            }
            else
            {
                rbu_PorNombre.Checked = true;
                rbu_PorNombre_CheckedChanged(null, null);
            }
            PacienteBE obj = new PacienteBE();
            List<PacienteBE> lstPaciente = new List<PacienteBE>();
            lstPaciente.Add(obj);
            dgPacienteControl.DataSource = lstPaciente;
            dgPacienteControl.DataBind();
        }
        public void BuscarPaciente(PacienteBE obj)
        { 
             List<PacienteBE> lstPaciente = new List<PacienteBE>();
             lstPaciente = oController.Buscar_Paciente(obj);
             if (lstPaciente.Count > 0)
             {
                 dgPacienteControl.DataSource = lstPaciente;
                 dgPacienteControl.DataBind();
                 lbl_Cantidad.Text = lstPaciente.Count.ToString() + " Registros(s) encontrados";
             }
             else
             {
                 lblMensaje.Visible = true;
                 lblMensaje.Text =lblMensaje.Text + " No se ha encontrado pacientes para el criterio de busqueda.";
                 lbl_Cantidad.Text = "0 Registros(s) encontrados";
             }
        }
        #endregion
        #region Eventos
        protected void btn_Buscar_Click(object sender, EventArgs e)
        {
            PacienteBE oPaciente = new PacienteBE();
            dgPacienteControl.DataSource = new List<PacienteBE>();
            dgPacienteControl.DataBind();
            bool booValidar = true;

            if (rbu_PorNombre.Checked)
            {
                if (txt_Apellido_Materno.Text.Trim() != string.Empty)
                    if (!ValidarCarateres(txt_Apellido_Materno.Text.Trim(), 0))
                        booValidar = false;
                if (txt_Apellido_Paterno.Text.Trim() != string.Empty)
                    if (!ValidarCarateres(txt_Apellido_Paterno.Text.Trim(), 0))
                        booValidar = false;
                if (txt_Nombre.Text.Trim() != string.Empty)
                    if (!ValidarCarateres(txt_Nombre.Text.Trim(), 0))
                        booValidar = false;

                if (booValidar)
                {
                    if (txt_ApellidoPaterno.Text.Trim() != string.Empty || txt_Apellidomaterno.Text.Trim() != string.Empty || txt_Nombre.Text.Trim() != string.Empty)
                    {
                        oPaciente.TipoBusqueda = 1;
                        oPaciente.ApellidoMaterno = txt_Apellidomaterno.Text.Trim();
                        oPaciente.ApellidoPaterno = txt_ApellidoPaterno.Text.Trim();
                        oPaciente.Nombre = txt_Nombre.Text.Trim();
                        BuscarPaciente(oPaciente);
                    }
                    else
                    {
                        lblMensaje.Visible = true;
                        lblMensaje.Text = " Debe ingresar al menos un nombre o apellido.";

                    }
                }
                else
                {
                    lblMensaje.Visible = true;
                    lblMensaje.Text = " No puede ingresar carateres especiales.";
                }
            }
            else
            {
                if (txt_NroDocumento.Text.Trim() != string.Empty)
                    if (!ValidarCarateres(txt_NroDocumento.Text.Trim(), 1))
                        booValidar = false;
                if (booValidar)
                {
                    if (txt_NroDocumento.Text.Trim() != string.Empty)
                    {
                        oPaciente.TipoBusqueda = 2;
                        oPaciente.NumeroDocumento = txt_NroDocumento.Text.Trim();
                        BuscarPaciente(oPaciente);
                    }
                    else
                    {
                        lblMensaje.Visible = true;
                        lblMensaje.Text = " Debe ingresar un número de documento.";
                    }
                }
                else
                {
                    lblMensaje.Visible = true;
                    lblMensaje.Text = " No puede ingresar carateres especiales.";
                }
            }
     //       BuscarPaciente(oPaciente);
        }
        protected void rbu_PorNombre_CheckedChanged(object sender, EventArgs e)
        {
            txt_NroDocumento.ReadOnly = true;
            txt_Apellidomaterno.ReadOnly = false;
            txt_ApellidoPaterno.ReadOnly = false;
            txt_Apellidomaterno.ReadOnly = false;
            txt_Nombre.ReadOnly = false;
            rbu_PorNroDocumento.Checked = false;
            txt_NroDocumento.Text = string.Empty;
            txt_Nombre.Focus();
        }
        protected void rbu_PorNroDocumento_CheckedChanged(object sender, EventArgs e)
        {
            txt_NroDocumento.ReadOnly = false;
            txt_Apellidomaterno.ReadOnly = true;
            txt_ApellidoPaterno.ReadOnly = true;
            txt_Apellidomaterno.ReadOnly = true;
            txt_Nombre.ReadOnly = true;
            rbu_PorNombre.Checked = false;
            txt_Nombre.Text = string.Empty;
            txt_Apellido_Materno.Text = string.Empty;
            txt_Apellido_Paterno.Text = string.Empty;
            txt_NroDocumento.Focus();
        }
        private bool ValidarCarateres(string texto, int tipo)
        {
            bool res = true;
            string validar = string.Empty;
            string cadena = string.Empty;
            if (texto.Trim() != string.Empty)
            {
                switch (tipo)
                {
                    case 0://Alfanumericos no caracteres especiales
                        cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ-0123456789";
                        break;
                    case 1://Solo numeros
                        cadena = "-0123456789";
                        break;
                    case 2://Solo Letras
                        cadena = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
                        break;
                    case 3://Solo numeros y decimales
                        cadena = "-0123456789.";
                        break;
                    default:
                        break;
                }
                #region Validacion
                for (int i = 0; i < texto.Length; i++)
                {
                    validar = texto.Substring(i, 1);
                    if (cadena.IndexOf(char.Parse(validar)) == -1)
                    {
                        res = false;
                        break;
                    }
                }
                #endregion
            }
            else
                res = false;

            return res;
        }
        #endregion

        #region Propiedades
        public int TipoBus { get; set; }

        public TextBox txt_Apellido_Paterno
        {
            get { return txt_ApellidoPaterno; }
            set { txt_ApellidoPaterno = value; }
        }
        public TextBox txt_Apellido_Materno
        {
            get { return txt_Apellidomaterno; }
            set { txt_Apellidomaterno = value; }
        }
        public TextBox txt_Nombre_Paciente
        {
            get { return txt_Nombre; }
            set { txt_Nombre = value; }
        }
        public TextBox txt_Numero_Documento
        {
            get { return txt_NroDocumento; }
            set { txt_NroDocumento = value; }
        }
        public Button btn_Buscar_Paciente
        {
            get { return btn_Buscar; }
            set { btn_Buscar = value; }
        }
        public RadioButton rbu_PorNombre_Paciente
        {
            get { return rbu_PorNombre; }
            set { rbu_PorNombre = value; }
        }
        public RadioButton rbu_PorNroDoc_Paciente
        {
            get { return rbu_PorNroDocumento; }
            set { rbu_PorNroDocumento = value; }
        }
        public GridView dgPaciente
        {
            get { return dgPacienteControl; }
            set { dgPacienteControl = value; }
        }
        public HiddenField hdfNombre
        {
            get { return hdfNombreCompletoControl; }
            set { hdfNombreCompletoControl = value; }
        }
        public HiddenField hdfDocumento
        {
            get { return hdfDocumentoControl; }
            set { hdfDocumentoControl = value; }
        }
        #endregion

       



    }
}